package com.fd.spring.proxy;

import com.fd.spring.bean.Person;
import com.fd.spring.service.UserService;
import com.fd.spring.service.impl.UserServiceImpl;

import java.lang.reflect.Proxy;

/**
 * 进行动态代理类测试
 */
public class DyProxyMain {
    public static void main(String[] args) {
        // 1.先定义一个接口及其实现类
        UserService userService = new UserServiceImpl();
        // 2.定义一个动态代理类处理器,并且把上面的实现类作为参数传入
        UserHandler userHandler = new UserHandler(userService);
        // 3. 生成动态代理类(植入功能) 第一个参数是当前Service的类加载器,第二个参数是当前userService的实现的接口,第三个参数是动态代理类处理器
        UserService proxy =  (UserService)  Proxy.newProxyInstance(UserService.class.getClassLoader(), userService.getClass().getInterfaces(), userHandler);
        //4. 调用动态代理类,实现了AOP的功能
        proxy.login(new Person());
    }
}
